﻿Public Class ucEmpresaCadastro
#Region "Eventos públicos acessados pelo formulário de cadastro"
    Public Event Salvo()
    Public Event Cancelado()
#End Region

#Region "Empresa"



    Public Sub Novo()
        ' Da um new no model.pessoa
        bsEmpresa.AddNew()
        LoadEmpresa()
        StatusForm(True)
    End Sub

    Public Sub Visualiza(ByVal empresa As Model.Pessoa)
        StatusForm(False)

        Dim ctEmpresa As New Control.Empresa

        bsEmpresa.DataSource = ctEmpresa.GetById(empresa.cd_pessoa)

        LoadEmpresa()
    End Sub

    Private Sub LoadEmpresa()
        'Dim ControlPais As New Control.Pais
        'bsPais.DataSource = ControlPais.ListaTudo()

        Dim Empresa As Model.Pessoa
        Empresa = CType(bsEmpresa.Current, Model.Pessoa)

        Using ControlPais As New Control.Pais
            bsPais.DataSource = ControlPais.ListaTudo()
        End Using
        'cbPais.Refresh()
        If Empresa.Pais IsNot Nothing Then
            cbPais.SelectedValue = Empresa.Pais.cd_pais
        Else
            cbPais.SelectedValue = 0
            cbPais.SelectedItem = Nothing
        End If


        ' Carrega o Estado
        Using ControlEstado As New Control.Estado
            bsEstado.DataSource = ControlEstado.ListaTudo()

            If Empresa.Estado IsNot Nothing Then
                cbEstado.SelectedValue = Empresa.Estado.cd_estado

                ' Carrega os Municipios do Estado
                Using ControlMunicipio As New Control.Municipio
                    'bsMunicipio.DataSource = ControlMunicipio.ListaTudo()
                    bsMunicipio.DataSource = ControlMunicipio.GetByEstado(Empresa.Estado)
                End Using
            Else
                cbEstado.SelectedValue = 0
                cbEstado.SelectedItem = Nothing
            End If
        End Using

        If Empresa.Municipio IsNot Nothing Then
            cbMunicipio.SelectedValue = Empresa.Municipio.cd_municipio
        Else
            cbMunicipio.SelectedValue = 0
            cbMunicipio.SelectedItem = Nothing
        End If

        ' Carrega os contatos do Empresa
        ' Gambi, não está criando uma nova lista na classe quando o Empresa não tem contato
        'Dim c As IList(Of Model.Contato)
        'c = CType(bsEmpresa.Current, Model.Pessoa).Contatos
        If CType(bsEmpresa.Current, Model.Pessoa).Contatos.Count < 1 Then
            Dim cont As New List(Of Model.Contato)
            CType(bsEmpresa.Current, Model.Pessoa).Contatos = cont
        End If
        bsContato.DataSource = CType(bsEmpresa.Current, Model.Pessoa).Contatos

        ' Endereço
        If CType(bsEmpresa.Current, Model.Pessoa).Enderecos.Count < 1 Then
            Dim enderecos As New List(Of Model.Endereco)
            CType(bsEmpresa.Current, Model.Pessoa).Enderecos = enderecos
        End If
        bsEndereco.DataSource = CType(bsEmpresa.Current, Model.Pessoa).Enderecos

        'Dim ControPagamento As New Control.Pagamento
        'bsPagamento.DataSource = ControPagamento.ListaTudo()


        ' Regime Tributário
        cbRegimeTributario.DataSource = Model.Enum(Of Model.RegimeTributario).Descriptions()
        If Empresa.pessoa_regime_tributario > 0 Then
            cbRegimeTributario.SelectedIndex = Empresa.pessoa_regime_tributario
        End If

    End Sub

    Private Function CamposObrigatorio() As Boolean
        'errorCamposValidos.SetError(cbxProduto, "Você deve escolher um produto")
        Dim bResult As Boolean
        bResult = True

        If txtNome.Text = "" Then
            errorCamposValidos.SetError(txtNome, "Nome obrigatóro")
            bResult = False
        End If

        Return bResult
    End Function

    Private Sub Salvar()
        If CamposObrigatorio() Then

            Dim Empresa As Model.Pessoa
            Dim ControlEmpresa As New Control.Empresa

            bsContato.EndEdit()
            bsEndereco.EndEdit()

            bsEmpresa.EndEdit()
            Empresa = CType(bsEmpresa.Current, Model.Pessoa)


            If cbPais.SelectedIndex > -1 Then
                Empresa.Pais = CType(bsPais.Current, Model.Pais)
            Else
                Empresa.Pais = Nothing
            End If

            If cbMunicipio.SelectedIndex > -1 Then
                Empresa.Municipio = CType(bsMunicipio.Current, Model.Municipio)
            Else
                Empresa.Municipio = Nothing
            End If

            If cbEstado.SelectedIndex > -1 Then
                Empresa.Estado = CType(bsEstado.Current, Model.Estado)
            Else
                Empresa.Estado = Nothing
            End If

            ' Outras Informações -> Regime Tributário
            If cbRegimeTributario.SelectedIndex > 0 Then
                Empresa.pessoa_regime_tributario = CType(cbRegimeTributario.SelectedIndex, Short)
            Else
                Empresa.pessoa_regime_tributario = 0
            End If

            ControlEmpresa.Salvar(Empresa)

            ControlEmpresa = Nothing
            StatusForm(False)

            ' Avisa o form pricipal que salvou para retornar a pesquisa
            RaiseEvent Salvo()
        End If
    End Sub

    Private Sub Cancelar()
        ' Faz a treta toda, chama a camada control, cancela...
        bsEmpresa.CancelEdit()
        StatusForm(False)

        ' Avisa o form pricipal que cancelou para retornar a pesquisa
        RaiseEvent Cancelado()
    End Sub

    Private Sub Editar()
        StatusForm(True)
    End Sub

    ''' <summary>
    ''' Ativa e desativa os panels da tabpage para controlar a alteração dos campos
    ''' </summary>
    ''' <param name="Status"></param>
    ''' <remarks></remarks>
    Private Sub StatusForm(ByVal Status As Boolean)

        btnSalvar.Enabled = Status
        btnEditar.Enabled = Not Status

        pnlEmpresaCampos.Enabled = Status
        pnlContatoBar.Enabled = Status
        pnlContatoCampos.Enabled = Status
        pnlInfAdic.Enabled = Status
        'pnlEnderecoBar.Enabled = Status
        'pnlEnderecoCampos.Enabled = Status
    End Sub

    Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click
        Salvar()
    End Sub
    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        Cancelar()
    End Sub
    Private Sub btnEditar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEditar.Click
        Editar()
    End Sub

    'Private Sub habilitaSalvarEmpresa(ByVal b As Boolean)
    '    btnSalvar.Enabled = b
    '    btnCancelar.Enabled = b
    'End Sub

#End Region

#Region "Contato"
    Private Sub btnContatoIncluir1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnContatoIncluir.Click
        IncluirContato()
    End Sub
    Private Sub btnContatoRemover_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnContatoRemover.Click
        ExcluiContato()
    End Sub

    Private Sub IncluirContato()
        ' Grava uma possível alteração anterior
        bsContato.EndEdit()

        ' Novo
        bsContato.AddNew()

        ' Vincula a pessoa
        CType(bsContato.Current, Model.Contato).Pessoa = CType(bsEmpresa.Current, Model.Pessoa)

        'modoAlteracaoContato(True)

        txtContatoNome.Focus()
    End Sub

    'Private Sub SalvaContato()
    '    'Dim p As Model.Pessoa = CType(PessoaBindingSource.Current, Model.Pessoa)
    '    'Dim c As Model.Contato = CType(ContatoBindingSource.Current, Model.Contato)

    '    'If cbDepartamento.SelectedIndex > -1 Then
    '    '    c.Departamento = CType(DepartamentoBindingSource.Current, Model.Departamento)
    '    'End If

    '    'c.Pessoa = p

    '    'ContatoBindingSource.EndEdit()
    '    'desativaCadastroContato()

    '    bsContato.EndEdit()

    '    'CType(bsContato.Current, Model.Contato).Pessoa = CType(bsCliente.Current, Model.Pessoa)

    '    ''CType(bsCliente.Current, Model.Pessoa).Contatos.Add(CType(bsContato.Current, Model.Contato))

    '    modoAlteracaoContato(False)
    'End Sub

    'Private Sub AlteraContato()
    '    modoAlteracaoContato(True)
    'End Sub

    'Private Sub CancelarContato()
    '    bsContato.CancelEdit()
    '    modoAlteracaoContato(False)
    'End Sub

    Private Sub ExcluiContato()
        Dim contato As Model.Contato = CType(bsContato.Current, Model.Contato)
        Dim pessoa As Model.Pessoa = CType(bsEmpresa.Current, Model.Pessoa)

        ' Grava uma possível alteração anterior
        bsContato.EndEdit()

        If Dialog.QuestionYesNo("Deseja realmente remover este registro?") = Windows.Forms.DialogResult.Yes And Not bsContato.Current Is Nothing Then
            bsContato.Remove(contato)
            bsContato.DataSource = pessoa.Contatos
        End If
    End Sub
    'Private Sub modoAlteracaoContato(ByVal bYes As Boolean)
    '    'pnlContatoCampos.Enabled = bYes
    '    'TableLayoutPanelContato.Enabled = bYes
    '    'pnlEndereco.Enabled = Not bYes

    '    If bYes = True Then
    '        txtContatoNome.Focus()
    '    End If
    '    'btnContatoIncluir.Enabled = Not bYes
    '    'btnContatoAlterar.Enabled = Not bYes
    '    'btnContatoRemover.Enabled = Not bYes

    '    'btnContatoSalvar.Enabled = bYes
    '    'btnContatoCancelar.Enabled = bYes

    '    'habilitaSalvarCliente(Not bYes)

    '    'dgvContato.Enabled = Not bYes
    '    'ContatoBindingSource.DataSource = CType(PessoaBindingSource.Current, Model.Pessoa).Contatos
    'End Sub

#End Region
End Class
